/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polybook.utils;

import java.util.Properties;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;

/**
 * Classe permettant de charger facilement des dictionnaires de données
 * @author epulapp
 */
public class DatasFileUtils {
    
    /**
     * Constructeur vide
     */
    private DatasFileUtils() {  }
    
    /**
     * Charge le contenu du fichier en parametre et le retourne une liste de chaine contenant chaque élément du dictionnaire
     * @param fileUrl Url du fichier cible à partir de la racine du projet
     * @return La liste complète des données du dictionnaire
     * @throws IOException Dans le cas d'une erreur de chargement du fichier
     */
    public static List<String> load(String fileUrl) throws IOException {
        String fileUrlFinale = "../" + fileUrl;
        try {
            InputStream inputStream = DatasFileUtils.class.getResourceAsStream(fileUrlFinale);
            List<String> listLines = IOUtils.readLines(inputStream);
            inputStream.close();
            return listLines;
        } catch(IOException e) {
            Log.e("Impossible de charger le fichier " + fileUrlFinale);
            throw e;
        } catch(NullPointerException e) {
            Log.e("Erreur lors du parcour du fichier " + fileUrlFinale);
            throw e;
        }
    }
    
    /**
     * Méthode de chargement de dictionnaire, avec selection aléatoire de x (size) éléments
     * Note : Cette méthode utilise la méthode load de la même classe.
     * @param size Nombre d'élement à selecitonner dans le dictionnaire
     * @param fileUrl Adresse du fichier à partir de la racine du projet
     * @return La liste des x données du dictionnaire mélangées
     * @throws IOException Dans le cas d'une erreur de chargement du fichier
     * @throws IllegalArgumentException Dans le cas ou le nombre d'éléments dans le dictionnaire est inferieur à celle demandée
     */
    public static List<String> loadWithRandomSort(int size, String fileUrl) throws IOException,IllegalArgumentException {
        // Génération des centres d'intérêt aléatoires à partir du dictionnaire
        List<String> hobbiesList = SortUtils.randomSort(DatasFileUtils.load(fileUrl));
        List<String> result;
        if(size > hobbiesList.size()) {
            throw new IllegalArgumentException("There is not enough entry in the dictionnary");
        } else {
            result = hobbiesList.subList(0, size);
        }
       return result;
    }
}